package com.geely.design.pattern.behavioral.visitor;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {

        //访问者模式适用于: 数据加载 数据操作 这两部分分离的情况

        ArrayList<Course> courseList = new ArrayList<>();

        System.out.println("==================组装数据开始==================");
        FreeCourse freeCourse = new FreeCourse();
        freeCourse.setName("Spring MVC数据绑定");

        CodingCourse codingCourse = new CodingCourse();
        codingCourse.setName("Java 设计模式");
        codingCourse.setPrice(299);

        courseList.add(freeCourse);
        courseList.add(codingCourse);
        System.out.println("==================组装数据完毕==================");

        for (Course course : courseList) {
            course.accept(new Visitor()); // 核心: 根据不同的IVisitor对于相同的数据(course)产生不同的操作行为
                                          //      不同实现的访问者
        }                                 // 执行分析: 先到不同的course, course中可以添加一些逻辑,
    }                                     //          然后将course的当前对象this传给visitor,再让访问者去处理
}                                         //          相当于有了两层逻辑
